package com.zhentao.test;

import java.util.Scanner;

/**
 * 学生为了方便记忆单词，自制一个单词库管理系统，用于收藏单词、显示所有已收藏单词、删除单词等操作 ( 行为、功能、方法, 函数 )。
 * 定义长度为200的字符串数组，完成上述操作。
 * 菜单：
 * 菜单可以循环显示，选择1、2、3或其他数字进行操作之后会继续显示此菜单；选择4时，退出系统；
 * （16）正确编译运行出现效果（3分）
 * ① 包含单行注释、多行注释和文档注释，每种至少一处；（2分）
 * ② 命名规范（1分）
 */
public class Main {
  // 1. 创建程序的入口
  public static void main(String[] args) {
    Student student = new Student();
    Scanner scn = new Scanner(System.in);

    // （3）选择合适的循环语句，保证菜单能循环使用；（5分）
    while(true){
      // （2）能正确使用输出语句打印菜单信息；（5分）
      System.out.println("===============单词库管理===============");
      System.out.println("1.收藏 2.显示 3.删除 4.退出");
      // 实现录入用户的int值
      // （4）能正确获得选择的菜单编号（“请选择”后输入的数字）；（4分）
      int i = scn.nextInt();
      // （5）能根据输入的菜单编号进入不同的分支进行收藏、显示、删除、退出等操作；（5分）
      switch (i){
        case 1 :
          // 收藏单词
          // （6）收藏时，能正确判断单词是否已经收藏过；（5分）
          //程序录入一个单词, 与数组中的每一个值比较。
          String [] wordsArray = student.getWords();
          System.out.println("请输入新添加的单词 : ");
          String str = scn.next();
          for (int j = 0; j < wordsArray.length; j++) {
            // 比较两个字符串的内容是否相同, 用equals方法
            if (str.equals(wordsArray[j])) {
              // （7）如果已经收藏过，能输出“单词已经收藏过！”（3分）
              System.out.println("单词已经收藏过！");
            }else{
              // （8）如果没有收藏过，收藏单词，收藏成功后输出“单词收藏成功”；（5分）
              // null 或者 与输入的内容不一样, 程序都会运行到这里,
              if (wordsArray[j] == null ){
                // 如果为 null 下标元素无值。
                wordsArray[j] = str ;
                System.out.println("单词收藏成功!!!!");
                break;
              }
            }
          }
          break ;
        case 2 :
          String [] wordsArray1 = student.getWords();
          int count = 0 ; // null值的总数
          int count1 = 0 ; // 有数据的总数
          for (int j = 0; j < wordsArray1.length; j++) {
            if(wordsArray1[j] == null){
              count ++ ; // 对null的数量进行计数
            }else{
              count1++;
              // （10）显示所有已收藏单词时，如果有收藏单词，能输出所有单词；（5分）
              System.out.print(wordsArray1[j] + "\t");
              //      （11）输出格式正确，包括每行5个单词、不输出null值；（5分）
              if (count1 % 5 == 0){
                System.out.println();
              }
            }
          }
          if (count == 200){
            // （9）显示所有已收藏单词时，如果没有收藏过任何单词，能提示“没有收藏任何单词”；（3分）
            System.out.println("没有收藏任何单词");
          }

          System.out.println(); // 实现最后一行内容实现换行
          break ;
        case 3 :
          String [] wordsArray2 = student.getWords();
          System.out.println("请输入您要删除的单词 : ");
          String strIn = scn.next();
          // 遍历数组, 与输入的内容进行比较, 得到输入的单词是否存在于数组当中。
          // （12）删除单词时，能正确判断单词是否收藏过；（5分）
          boolean flag = false ;
          for (int j = 0; j < wordsArray2.length; j++) {
            if(strIn.equals(wordsArray2[j])){
              flag = true ;
              break;
            }
          }
          // 如果输入的单词与数组中的单词有匹配, 那么需要删除。
          // 做删除操作
          if(flag){
            //      （14）如果收藏过，正确删除并提示“删除成功”；（5分）
            for (int j = 0; j < wordsArray2.length; j++) {
              if(strIn.equals(wordsArray2[j])){
                // 当前位置的内容删除, 后续所有的有值的元素前移一位
                wordsArray2[j] = null ;
                for ( int x = j ; x < wordsArray2.length - 1 ; x ++ ){
                  wordsArray2[x] = wordsArray2[x + 1] ; // 后续的null 都往前移一位, 没有意义
                }
              }
            }
            wordsArray2[wordsArray2.length - 1] = null ;
            System.out.println("删除成功");
          }else{
            //      （13）如果没有收藏过，给出提示“单词没有收藏过，无需删除！”（4分）
            System.out.println("单词没有收藏过，无需删除！");
          }
          break ;
        case 4 :
          // （15）选择菜单“4.退出”后，提示“谢谢使用，再见！”后，退出系统；（3分）
          System.out.println("谢谢使用，再见！");
          return ; // return 退出程序 , break 也能实现跳出循环, 但需要注意, 是否是最外层的循环
        default: break ;
      }
    }


  }
}

// 2. 创建学生类
class Student {
  // （1）正确定义长度为200的字符串数组，用于存储单词（5分）
  private String [] words ;

  // 在一个类中, 实例变量都不能直接赋值, 如果是需要赋值的情况, 需要将赋值的代码入在构造器当中。
  public Student (){
    words = new String[200];
  }


  public String[] getWords() {
    return words;
  }



  public void saveWord (){}

  public void showWord (){}

  public void deleteWord (){}
}